const {
  addProductSql,
  editProductSql,
  queryProductsById,
  getProductById,
  delProductById,
} = require("../utils/product");

const router = require("koa-router")();
/**
 * @swagger
 * /products: #接口访问路径(拼接上之前swagger.js中的host蛇者)
 *   get: #请求方式
 *     summary: 获取用户发布的所有作品  #接口信息
 *     description: 获取用户发布的所有作品 #接口描述
 *     tags: [作品] #接口分组
 *     security:
 *       - Authorization:
 *     responses: #返回结果
 *       200:
 *         description: 成功
 *       400:
 *         description: 失败
 */

router.get("/products", async (ctx) => {
  const { user } = ctx.state;
  const userId = user.id;
  const result = await queryProductsById(userId);
  ctx.body = {
    code: 200,
    data: result,
    message: "获取作品成功",
  };
});

/**
 * @swagger
 * /product/{id}: #接口访问路径(拼接上之前swagger.js中的host蛇者)
 *   get: #请求方式
 *     summary: 作品详情接口  #接口信息
 *     description: 作品详情  接口 #接口描述
 *     tags: [作品] #接口分组
 *     parameters: #传递参数
 *       - name: id #参数名字
 *         description: 作品的id #参数信息
 *         in: path #参数存放位置formData是存放到请求体中
 *         required: true #是否是必传参数
 *         type: string #参数类型
 *     responses: #返回结果
 *       200:
 *         description: 成功
 *       400:
 *         description: 失败
 */

router.get("/product/:id", async (ctx) => {
  const { id } = ctx.params;
  const resp = await getProductById(id);

  ctx.body = {
    code: 200,
    message: "获取成功",
    data: resp,
  };
});

/**
 * @swagger
 * /product: #接口访问路径(拼接上之前swagger.js中的host蛇者)
 *   put: #请求方式
 *     summary: 创建作品接口  #接口信息
 *     description: 创建作品接口 #接口描述
 *     tags: [作品] #接口分组
 *     security:
 *       - Authorization:
 *     produces:
 *       - application/x-www-form-urlencoded
 *     parameters: #传递参数
 *       - name: userId #参数名字
 *         description: 用户的id #参数信息
 *         in: formData #参数存放位置formData是存放到请求体中
 *         required: true #是否是必传参数
 *         type: number #参数类型
 *       - name: productData
 *         description: 存储的json数据
 *         in: formData
 *         required: true
 *         type: string
 *       - name: aboutId
 *         description: 协作人 id
 *         in: formData
 *         type: string
 *     responses: #返回结果
 *       200:
 *         description: 成功
 *       400:
 *         description: 失败
 */

router.put("/product", async (ctx) => {
  const { user } = ctx.state;
  const { productData } = ctx.request.body;
  const data = {
    productData,
    userId: user.id,
    createTime: new Date().getTime(),
    updateTime: new Date().getTime(),
    aboutId: null,
  };
  const result = await addProductSql(data);
  ctx.body = {
    code: 200,
    message: "创建成功",
    data: result,
  };
});

/**
 * @swagger
 * /product/{id}: #接口访问路径(拼接上之前swagger.js中的host蛇者)
 *   post: #请求方式
 *     summary: 编辑作品接口  #接口信息
 *     description: 编辑作品接口 #接口描述
 *     tags: [作品] #接口分组
 *     security:
 *       - Authorization:
 *     produces:
 *       - application/x-www-form-urlencoded
 *     parameters: #传递参数
 *       - name: id #参数名字
 *         description: 作品的id #参数信息
 *         in: path #参数存放位置formData是存放到请求体中
 *         required: true #是否是必传参数
 *         type: string #参数类型
 *       - name: productData
 *         description: 存储的json数据
 *         in: formData
 *         required: true
 *         type: string
 *     responses: #返回结果
 *       200:
 *         description: 成功
 *       400:
 *         description: 失败
 */

router.post("/product/:id", async (ctx) => {
  const { id } = ctx.params;
  const { productData } = ctx.request.body;
  const resp = await editProductSql({ id, productData });
  ctx.body = {
    code: 200,
    message: "修改成功",
    data: resp,
  };
});

/**
 * @swagger
 * /product/{id}: #接口访问路径(拼接上之前swagger.js中的host蛇者)
 *   delete: #请求方式
 *     summary: 删除作品接口 注意只可以删除自己发布  #接口信息
 *     description: 删除作品接口 注意只可以删除自己发布 #接口描述
 *     tags: [作品] #接口分组
 *     security:
 *       - Authorization:
 *     parameters: #传递参数
 *       - name: id #参数名字
 *         description: 作品的id #参数信息
 *         in: path #参数存放位置formData是存放到请求体中
 *         required: true #是否是必传参数
 *         type: string #参数类型
 *     responses: #返回结果
 *       200:
 *         description: 成功
 *       400:
 *         description: 失败
 */

router.delete("/product/:id", async (ctx) => {
  const { id } = ctx.params;
  const { id: userId } = ctx.state.user;
  const products = await getProductById(id);
  if (products.length) {
    const product = products[0];
    if (product.userId === userId) {
      // 删除
      const result = await delProductById(id);

      if (result.affectedRows) {
        // 返回
        ctx.body = {
          code: 200,
          message: "删除成功",
        };
      } else {
        // 返回
        ctx.body = {
          code: 400,
          message: "删除失败",
        };
      }
    } else {
      ctx.body = {
        code: 403,
        message: "没有删除权限",
      };
    }
  } else {
    ctx.body = {
      code: 404,
      message: "作品不存在， 无法删除",
    };
  }

  // ctx.body = {
  //   code: 403,
  //   message: "没有删除权限"
  // }

  // ctx.body = {
  //   code: 403,
  //   message: "没有删除权限"
  // }
});

module.exports = router;
